import axios from 'axios';
import { useAuthStore } from '../stores/index.js'
// import { useRouter } from 'vue-router'
import router from '../router'
// const router= useRouter()
import { ElMessage,ElMessageBox  } from 'element-plus'

axios.defaults.headers['Content-Type'] = 'multipart/form-data';
const instance = axios.create({    //创建axios实例，在这里可以设置请求的默认配置
    timeout: 100000, // 设置超时时间10s
    baseURL: 'https://api.xingwangdata.com/xwd_front_pro'
});




/** 添加请求拦截器 **/
instance.interceptors.request.use(config => {

    const authStore = useAuthStore()
    // 自动带上 token
    if (authStore.token) {
        config.headers.set("x-access-token", authStore.token);
        //   config.headers.Authorization = `Bearer ${authStore.token}`

    }
    if (config.method === 'get') { // 添加时间戳参数，防止浏览器（IE）对get请求的缓存
        config.params = {
            ...config.params,
            t: new Date().getTime()
        };
    }
    // 在这里：可以根据业务需求可以在发送请求之前做些什么:例如我这个是导出文件的接口，因为返回的是二进制流，所以需要设置请求响应类型为blob，就可以在此处设置。
    if (config.url.includes('pur/contract/export')) {
        config.headers['responseType'] = 'blob';
    }
    // 我这里是文件上传，发送的是二进制流，所以需要设置请求头的'Content-Type'
    if (config.url.includes('pur/contract/upload')) {
        config.headers['Content-Type'] = 'multipart/form-data';
    }
    return config;
}, error => {
    // 对请求错误做些什么
    return Promise.reject(error);
});

/** 添加响应拦截器  **/
instance.interceptors.response.use(
    response => {
      const res = response.data;
     
      if (res.code === 401) {
        const authStore = useAuthStore();
        authStore.logout();
        router.push('/login');
        return Promise.reject(res);
      }
      // 处理 901 错误并展示后端返回的提示
      if (res.code === 901) {
        const info = res.data; // { type, title, content }
        ElMessageBox.alert(
          info.content,
          info.title,
          {
            type: info.type,              
            confirmButtonText: '关闭',
            callback: () => {
              // 点击“知道了”后如果需要什么操作可以写在这里
            }
          }
        );
        // 如果你想阻止业务 then 直接 reject
        return Promise.reject(res);
      }
      // 正常返回业务 data
      return res;
    },
    error => {
      // HTTP 错误统一处理
      if (error.response?.status === 401) {
        const authStore = useAuthStore();
        authStore.logout();
        router.push('/login');
      }
      return Promise.reject(error);
    }
  );
  

/* 统一封装get请求 */
export const get = (url, params, config = {}) => {
    return new Promise((resolve, reject) => {
        instance({
            method: 'get',
            url,
            params,
            ...config
        }).then(response => {
            resolve(response);
        }).catch(error => {
            reject(error);
        });
    }).catch(error => {
        console.log(error);
    });
};

/* 统一封装post请求  */
export const post = (url, data = {}, config = {}) => {
    return new Promise((resolve, reject) => {
        instance({
            method: 'post',
            url,
            data,
            ...config
        }).then(response => {
            resolve(response);
        }).catch(error => {
            reject(error);
        });
    }).catch(error => {
    });
};
